package com.color.admin.system.servie;

import com.color.admin.common.core.base.AuthUser;
import com.color.admin.common.core.base.BaseService;
import com.color.admin.common.core.page.PageRequest;
import com.color.admin.common.core.page.PageResponse;
import com.color.admin.system.entity.SysMenu;
import com.color.admin.system.entity.query.MenuQueryCriteria;
import com.color.admin.system.entity.vo.menu.MenuTreeVo;
import com.color.admin.system.entity.vo.menu.MenuVo;
import com.color.admin.system.entity.vo.menu.RouterVo;

import java.util.List;
import java.util.Set;

/**
 * @author HaiQiu
 */
public interface MenuService extends BaseService<SysMenu, SysMenu,
        Set<String>, String, MenuVo, PageRequest<MenuQueryCriteria>, PageResponse<MenuVo>> {

    @Override
    void save(SysMenu sysMenu);

    @Override
    void update(SysMenu sysMenu);

    @Override
    void delete(Set<String> menuIds);

    @Override
    MenuVo get(String menuId);

    @Override
    PageResponse<MenuVo> list(PageRequest<MenuQueryCriteria> request);

    /**
     * 所有菜单
     * @return 所有菜单
     */
    List<MenuVo> menuAll();

    /**
     * 树形菜单
     * @return 树形菜单
     */
    List<MenuTreeVo> tree();

    /**
     * 登录获取菜单路由
     * @param userId 用户ID
     * @return 菜单路由
     */
    List<RouterVo> getMenus(String userId);

    /**
     * 查询用户菜单权限(内部feign调用)
     * @param userId 用户ID
     * @return 菜单权限
     */
    List<AuthUser> authList(String userId);
}
